#ifndef PRINTINFO_H
#define PRINTINFO_H

// Define LOG and DEBUG flags to enable or disable logging and debugging
#define LOG 1
#define DEBUG 1

#include <string.h>
#include <sstream>
#include <stdarg.h>
#include<string>
#include<cerrno>

// // 格式化字符串
// std::string formatString(const std::string& fmt, ...) {
//     va_list args;
//     va_start(args, fmt);

//     // 创建一个std::stringstream对象
//     std::stringstream ss;
//     char buffer[1024];
//     vsnprintf(buffer, sizeof(buffer), fmt.c_str(), args);
//     ss << buffer;

//     va_end(args);
//     return ss.str();
// }

//如果LOG是1，则定义LOG_PRINT，否则定义为空
#if LOG
    #include <syslog.h>
    #define LOG_PRINT(LOG_INFO, fmt, ...) syslog(LOG_INFO, fmt, ##__VA_ARGS__)
#else
    #define LOG_PRINT(LOG_INFO, fmt, ...) (void)0
#endif

// 如果DEBUG是1，则定义DEBUG_PRINT，否则定义为空
#if DEBUG
    #include <cstdio>
    #define DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)
#else
    #define DEBUG_PRINT(fmt, ...) (void)0
#endif

// 打印日志和调试信息（支持格式化）
#define PRINTF_LOG_AND_DEBUG(LOG_INFO, fmt, ...) \
        LOG_PRINT(LOG_INFO, fmt, ##__VA_ARGS__); \
        DEBUG_PRINT(fmt, ##__VA_ARGS__);

#define PRINT_ERRNO_AND_STRERROR(errno, fmt, ...)\
        PRINTF_LOG_AND_DEBUG(LOG_ERR, fmt ": %s", ##__VA_ARGS__, strerror(errno));


#endif // PRINTINFO_H